package org.alis.ap.rpc.client.selector;

import org.alis.ap.rpc.Peer;
import org.alis.ap.rpc.transport.TransportClient;

import java.util.List;

/**
 * TransportSelector desc: 表示选择哪个Server去链接
 *
 * @author luochuan
 * @date 2020/10/21 13:37
 */
public interface TransportSelector {

    /**
     * 初始化方法
     * @param peerList 客户端形象
     * @param count 连接数 client 与 server 建立多少链接
     * @param clazz 连接到哪个client
     */
    void init(List<Peer> peerList, int count,Class<? extends TransportClient> clazz);

    /**
     * 选择一个transport与Server做交互
     * @return 网络Client
     */
    TransportClient select();


    /**
     * 释放用完的client
     * @param client 客户端
     */
    void release(TransportClient client);

    /**
     *  关闭
     */
    void close();
}
